<

TestWidgetsFlutterBinding.クロックの変更

まとめ

TestWidgetsFlutterBinding.clock今はから来ていますpackage:clockそしてそうではありませんpackage:quiver

コンテクスト

flutter_testパッケージは依存関係を削除しています より重い体重quiver依存関係を優先するパッケージ さらに 2 つのターゲットを絞った軽量パッケージ、clockfake_async

これは、クロックを取得するユーザー コードに影響を与える可能性があります。TestWidgetsFlutterBindingそしてそれをAPIに渡します それはClockからpackage:quiver、 たとえば、次のようなコード:

testWidgets('some test', (WidgetTester tester) {
  someApiThatWantsAQuiverClock(tester.binding.clock);
});

移行ガイド

この変更後に表示される可能性のあるエラーは次のようになります。

Error: The argument type 'Clock/*1*/' can't be assigned to the parameter type 'Clock/*2*/'.
 - 'Clock/*1*/' is from 'package:clock/src/clock.dart' ('<pub-cache>/clock/lib/src/clock.dart').
 - 'Clock/*2*/' is from 'package:quiver/time.dart' ('<pub-cache>/quiver/lib/time.dart').

オプション #1: パッケージからのパッケージ:quiver クロックの作成:クロック クロック

最も簡単な移行は、package:quiverからの時計package:clockクロックを渡すことで実行できます。.now関数 への引き裂きClockコンストラクタ:

移行前のコード:

testWidgets('some test', (WidgetTester tester) {
  someApiThatWantsAQuiverClock(tester.binding.clock);
});

移行後のコード:

testWidgets('some test', (WidgetTester tester) {
  someApiThatWantsAQuiverClock(Clock(tester.binding.clock.now));
});

オプション #2: package: Clock クロックを受け入れるように API を変更する

呼び出している API を所有している場合は、 を受け入れるように変更することもできます。Clockからpackage:clock。 これは何位かに基づいた判断です。 クロック以外のものを使用してこの API を呼び出す から取得したTestWidgetsFlutterBinding

このルートを進むと、通過する通話サイトがtester.binding.clock変更する必要はありませんが、 ただし、他の通話サイトでも同様です。

オプション #3: API を変更して、DateTime function()

のみを使用する場合は、Clockそのためにnow関数、 API を制御すると、それを変更することもできます の代わりにその関数を直接受け入れるClock。 これにより、どちらのタイプでも簡単に呼び出すことができます。Clock、 のティアオフを通過することにより、nowいずれかのタイプのクロックからのメソッド:

移行前のコードの呼び出し:

testWidgets('some test', (WidgetTester tester) {
  someApiThatWantsAQuiverClock(tester.binding.clock);
});

移行後のコードの呼び出し:

testWidgets('some test', (WidgetTester tester) {
  modifiedApiThatTakesANowFunction(tester.binding.clock.now);
});

タイムライン

リリースされたバージョン: 1.18.0
安定版リリース: 1.20

参考文献

API ドキュメント:

  • TestWidgetsFlutterBinding

関連する PR:

  • PR 54125: flutter_test quiver dep を削除します。 代わりにfake_asyncとクロックを使用してください